/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package server;
//<editor-fold defaultstate="collapsed" desc=" các thư viện sử dụng">
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;

/**
 *
 * @author KingofSpeed
 */



public class MyJOptionPane extends JOptionPane {
   public static String showInputDialog(  final String title, final String message , final String name, final ArrayList<String> tam)
   {
       String data =name;
       //<editor-fold defaultstate="collapsed" desc=" class lấy dữ liệu từ input box">
       final class GetData extends JDialog implements ActionListener
       {
            JTextField tb = new JTextField(name);
            JButton bOk = new JButton("   OK   ");
            JButton bCancel = new JButton("Cancel");
            String result = name;
            @Override
            public void setTitle(String title) {
                super.setTitle(title);
            }
            public GetData()
            {
                this.setTitle(title);
                this.setSize( 300, 500 );
                tb.setDocument(new JTextFieldLimit(20));
                tb.setText(name);
                bOk.addActionListener(this);
                bCancel.addActionListener(this);
                
                
                setModal(true);
                getContentPane().setLayout( new BorderLayout());
                setDefaultCloseOperation( DISPOSE_ON_CLOSE );
                setLocation( 400, 300 );
                getContentPane().add( new JLabel(message), BorderLayout.NORTH );
                getContentPane().add(tb, BorderLayout.CENTER);
                JPanel jp = new JPanel();
               
                jp.add(bOk);
                jp.add(bCancel);
                getContentPane().add(jp, BorderLayout.SOUTH);
                pack();
                setVisible(true);
            }
            //<editor-fold defaultstate="collapsed" desc=" hàm xử lí khi nhấn ok hoặc cancel">
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                
                if ( e.getSource() == bOk)
                {
                    if ( CheckName( tb.getText() ) == true )
                    {
                        result = tb.getText();
                        dispose();
                    }                    
                }
                else 
                {
                    dispose();
                }
            }
             //</editor-fold >
            //<editor-fold defaultstate="collapsed" desc=" hàm hiện các thông báo">
             public void ShowMessageBox ( String ms , String l )
            {
                if ( "Error".equals(l))
                    JOptionPane.showMessageDialog( this, ms, "Lỗi", JOptionPane.ERROR_MESSAGE);
                else if ( "Success".equals(l))
                    JOptionPane.showMessageDialog( this, ms, "Thành Công", JOptionPane.INFORMATION_MESSAGE);
                else
                    JOptionPane.showMessageDialog( this, ms, "Thông Báo", JOptionPane.PLAIN_MESSAGE);
            }
              //</editor-fold >
             //<editor-fold defaultstate="collapsed" desc=" hàm kiểm tra coi tên đã tồn tại hay chưa">
             public boolean CheckName( String name )
            {
                if ( name.length() < 4 || name.length() > 20 )
                {
                    ShowMessageBox( "Tên Phải Lớn Hơn 4 Kí Tự và nhỏ hơn 20 kí tự", "Error");
                    return false;
                }
                for ( int i=0; i < name.length(); i++ )
                {
                    if ( name.charAt(i) < '0' || (name.charAt(i) > '9' && name.charAt(i) < 'A') ||
                            (name.charAt(i) > 'Z' && name.charAt(i) < 'a') || name.charAt(i) > 'z')
                    {
                        ShowMessageBox( "Tên Chỉ Được Chứa Ký Tự Hoặc Số và không có dấu", "Error");
                        return false;
                    }
                }
                try
                {
                    for ( int i = 0; i < tam.size(); i++ )
                    {
                        if ( name.equals(tam.get(i)))
                        {
                            ShowMessageBox( "Tên Đã Có Rồi, Hãy Chọn Tên Khác", "Error");
                            return false;
                        }
                    }
                }
                catch( Exception ex ){}
                return true;
            }
              //</editor-fold >
            public String GetResult()
            {
                return result;
            }
       }
       data = new GetData().GetResult();       
       return data;
        //</editor-fold >
   }
   
   //<editor-fold defaultstate="collapsed" desc=" hàm hiển thị ô nhập port">
   public static int showInputPortDialog( )
   {
       int data = 0;
       final class GetPort extends JDialog implements ActionListener
       {
            JSpinner tb = new JSpinner();
            JButton bOk = new JButton("   OK   ");
            JButton bCancel = new JButton("Cancel");
            int result = 0;
            @Override
            public void setTitle(String title) {
                super.setTitle(title);
            }
            public GetPort()
            {
                tb.setValue(1234);
                this.setTitle("Nhập Vào Port Server");
                this.setSize( 300, 500 );
                setModal(true);
                getContentPane().setLayout( new BorderLayout());
                setDefaultCloseOperation( DISPOSE_ON_CLOSE );
                setLocation( 400, 300 );
                getContentPane().add( new JLabel("Số Port"), BorderLayout.NORTH );
                getContentPane().add(tb, BorderLayout.CENTER);
                JPanel jp = new JPanel();
                bOk.addActionListener(this);
                bCancel.addActionListener(this);
                jp.add(bOk);
                jp.add(bCancel);
                getContentPane().add(jp, BorderLayout.SOUTH);
                pack();
                setVisible(true);
            }
            //<editor-fold defaultstate="collapsed" desc=" xử lý khi click ok hoặc cancel">
            @Override
            public void actionPerformed(ActionEvent e) 
            {
                
                if ( e.getSource() == bOk)
                {
                    if ( CheckPort( Integer.parseInt(tb.getValue().toString())  ) == true)
                    {
                        result = Integer.parseInt(tb.getValue().toString());
                        dispose();
                    }                    
                }
                else 
                {
                    dispose();
                }
            }
             //</editor-fold >
            //<editor-fold defaultstate="collapsed" desc=" hàm hiện các thông báo">
             public void ShowMessageBox ( String ms , String l )
            {
                if ( "Error".equals(l))
                    JOptionPane.showMessageDialog( this, ms, "Lỗi", JOptionPane.ERROR_MESSAGE);
                else if ( "Success".equals(l))
                    JOptionPane.showMessageDialog( this, ms, "Thành Công", JOptionPane.INFORMATION_MESSAGE);
                else
                    JOptionPane.showMessageDialog( this, ms, "Thông Báo", JOptionPane.PLAIN_MESSAGE);
            }
              //</editor-fold >
             //<editor-fold defaultstate="collapsed" desc=" kiểm tra xem port có hợp lệ không">
             public boolean CheckPort( int port )
            {
                if ( port < 10 || port > 55555 )
                {
                    ShowMessageBox( "Port Phải Lớn Hơn 10 và nhỏ hơn 55555", "Error");
                    return false;
                }
                return true;
            }
            public int GetResult()
            {
                return result;
            }
             //</editor-fold >
       }
       data = new GetPort().GetResult();       
       return data;
   }
    //</editor-fold >
}
